/*
 * Copyright (c) 2020 hczn4cloud Authors. All Rights Reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.lvy.hczn.front.business.common;

/**
 * @author lengleng
 * @date 2020年01月01日
 * <p>
 * 缓存的key 常量
 */
public interface CacheConstants {

    /******************redis key**************************/
    /**
     * 信号检测
     */
    String REDIS_KEY_WCS_SIGNAL = "hczn:wcs:signal";

    /**
     * socket客户端
     */
    String REDIS_KEY_SOCKET_CLIENT = "socket:client";

    /**
     * 响应出库
     */
    String REDIS_KEY_SOCKET_WCS_TO_WMS = "socket:wcsToWms";

    /**
     * 客户取货出库到位
     */
    String REDIS_KEY_SOCKET_MQ_ONE_WCS_TO_WMS = "socket:inPlace";

    /**
     * 称重
     */
    String REDIS_KEY_SOCKET_WEIGHT = "socket:weight";

    /**
     * 针对填wcs数组填空值最大长度,之后放数据字典
     */
    int REDIS_KEY_WCS_LIST_SIZE = 50;

    /**
     * 类别缓存
     * 目前方案：类别放到外网订单项目，canal同步到mq,本地mq获取，缓存到本地redis
     */
    String REDIS_KEY_WMS_FRONT_CATEGORY = "wms:front:category";

    /**
     * 分拣员对应的分拣任务
     */
    String SORT_TASK_DETAIL_LIST_CLIENT = "sort:detail:client:list";

    /**
     * 分拣员需要分拣的spu列表
     */
    String SORT_TASK_DETAIL_SPU = "sort:detail:spu:list";

    /**
     * 分拣批量传入wcs消息队列，wcs队列存放箱子数量有限，暂存redis,
     * wcs响应能存到消息队列，则删除redis，否则在响应处，延时N秒，
     * 重发到wcs(wcs夹取货箱，则会释放队列，此时可写入wcs消息队列)
     * 延时N秒重发，异步重发，或者定时任务重发最好，独立开来
     * 发送途径：
     * 1.响应成功后发下一个
     * 2.响应失败后，重新存入redis
     * 3.提升机夹起箱子后，wcs释放队列重新发
     * 4.离开缓存位后再发
     */
    String SORT_TASK_DOWNLOAD = "sort:download:first:";

    /**
     * 同品类待出库分拣
     * 离开缓存位后，发相同品类的分拣
     */
    String SORT_TASK_DOWNLOAD_LAST = "sort:download:last:";

    /**
     * 到达缓存位
     */
    String IN_BUFFER_POS = "inBufferPos";

    /**
     * 入库传入重量
     */
    String SORT_TASK_DOWNLOAD_WEIGHT = "sort:download:weight:";

    /**
     * 连续指令发的分拣出库取货单
     */
    String SORT_TASK_TAKE_NUM = "sort:take:num:";

    /**
     * 下架中
     */
    String SORT_TASK_DOWNLOADING = "sort:loading";

    /**
     * 分拣的货箱仓库编号
     */
    String SORT_TASK_SEAT_ID = "sort:seat:";

    /**
     * wcs转换代码
     */
    String CONVERT_CODE = "convert:code:";

    /**
     * wcs响应之后，再发第二个指令到wcs
     * redis存储true or false，一秒超时，如下发指令响应及称重响应，需校验是否响应再发下个指令，web指令发送前做个校验
     */
    String WCS_RESPONSE = "wcs:response:";

    /**
     * 指令缓存
     */
    String WCS_POLICY = "wcs:policy:";

    /**
     * 冷冻区
     */
    String FREEZING_ZONE = "1";

    /**
     * 保鲜区
     */
    String PRESERVATION_ZONE = "51";

    /**
     * 常温区
     */
    String AMBIENT_ZONE = "101";

    /**
     * 温区前缀
     */
    String TEMPERATURE_ZONE = "temp:zone:";

    /**
     * 传入wcs的批次/取货编号，可做wcs的逻辑，如优先出库
     * eg:按takeNum，顺序出库；按takeNum下的或相变好，就近出库
     */
    String TAKE_NUM = "take:num:";

    /**
     * 货箱合并key
     */
    String MERGE_BOX = "merge:box:";

    /**
     * 销售退货
     */
    String RETURN_BOX = "return:box:";

    /**
     * 临期报损出库
     */
    String FRM_LOSS_BOX = "frm:loss:box:";

    /**
     * 货箱合并key
     */
    String MERGE_BOX_DETAIL_LIST = "merge:box:detail:";

    /**
     * 采购入库货箱称重重量存储
     */
    String WAREHOUSING_ENTRY_WEIGHT = "entry:";

    /**
     * 采购入库货箱称重重量存储
     */
    String WEIGHT_URL = "weight:url";

    /**
     * wcs消息队列key,wcs消息队列满了，就暂时不发，等夹取货箱时再发
     */
    String SORT_QUEUE_FULLED = "sort:queue:fulled";
    /********************************************/

    /******************redis key activeMq队列**************************/

    String WAREHOUSE = "active:mq:warehouse_";

    /**
     * ip绑定的仓库行
     */
    String DICT_TYPE_WH_COM = "sys_dict:wh_com";

    /**
     * 销售退货入库离开缓存位时获取的key，更新销售单
     */
    String CACHE_RETURN = "cache:rt:";

    /**
     * 退货入库列表，多个仓库号相同温区，只在一个仓库处理
     */
    String CACHE_RETURN_LIST = "cache:lt:";

    /**
     * 临期报损出库，入库时存在的货箱商品详情
     */
    String CACHE_FRM_LOSS = "cache:frm:";

}
